package com.hb.service;

import com.hb.domain.Spitter;
import com.hb.domain.Spittle;

import java.util.List;

/**
 * 假设我们将要创建的 RMI 服务需要发布 SpitterService 接口中的方法，如果我们使用传统的 RMI 来发布此服务，SpitterService 和 SpitterServiceImpl 中的
 * 所有方法都需要抛出 java.rmi.RemoteException。但是如果我们使用 Spring 的 RmiServiceExporter 把该类转变为 RMI 服务，那现有的实现不需要做任何改变。
 * RmiServiceExporter 可以把任意 Spring 管理的 bean 发布为 RMI 服务。RmiServiceExporter 把 bean 包装在一个适配器类中，并且适配器类代理到服务类
 * （SpitterServiceImpl）的请求，然后适配器类被绑定到 RMI 注册表中。其实就是 RmiServiceExporter 把 POJO 包装到服务适配器中，并将服务适配器绑定到 RMI
 * 注册表中，从而将 POJO 转换为 RMI 服务。
 */
public interface SpitterService {
    List<Spittle> getRecentSpittles(int count);
    void saveSpittle(Spittle spittle);
    void saveSpitter(Spitter spitter);
    Spitter getSpitter(long id);
    void startFollowing(Spitter follower, Spitter followee);
    List<Spittle> getSpittlesForSpitter(Spitter spitter);
    List<Spittle> getSpittlesForSpitter(String username);
    Spitter getSpitter(String username);
    Spittle getSpittleById(long id);
    List<Spitter> getAllSpitters();
}
